<?php namespace app\home\controller;

use houdunwang\request\Request;
use system\model\Article;
use system\model\Module;

class Entry
{
    protected $template;

    public function __construct()
    {
        $this->template = 'template/' . (IS_MOBILE ? 'mobile' : 'web');
        //↑IS_MOBILE常量、模板放在template、伪静态 分配手机与pc
        define(__TEMPLATE__, __ROOT__ . '/' . $this->template);
        //↑定义模板路径常量
        $res = $this->runModule();

//		var_dump(IS_MOBILE);
    }

    /**
     * 项目展示
     * @return bool|mixed
     */
    public function index()
    {
//        echo 111;
        return view($this->template . '/index.html');
//        $res = $this->runModule();
        //↑调用方法寻找需要时例化的模块
//        if ($res !== false) {
//        //↑找到模块进行拦截 并实例化模块
//            return $res;
//        }
//        return View::with('framework', 'HDPHP')->make();
//        //↑没有找到模块跳到首页
    }

    /**
     * 十周年首页
     * @return bool|mixed
     */
//    public function bx10th()
//    {
//        return view($this->template . '/bx10th/index.html');
////        $res = $this->runModule();
//        //↑调用方法寻找需要时例化的模块
////        if ($res !== false) {
////        //↑找到模块进行拦截 并实例化模块
////            return $res;
////        }
////        return View::with('framework', 'HDPHP')->make();
////        //↑没有找到模块跳到首页
//    }

    /**
     * 栏目页面
     */
    public function category()
    {
        $headConf = [
            'title'=>'列表页',
            'css'=>['list_article'],
        ];
        $cate_id = Request::get('cate_id');
//        p('$cate_id ='.$cate_id);
        return view($this->template . '/list.html',compact('headConf'));
    }

    /**
     * 文章内容页
     */
    public function content()
    {
        $arc_id = Request::get('arc_id');
        //找对应数据
        $data = Article::find($arc_id);
        //从文章表获取文章id
        return view($this->template . '/content.html', compact('data'));
    }
//实例化addons或module类
//框架默认不会识别app意外目录，通过composer.json进行配置自动加载
//?m=pic&action=controller/index/index [m:模块，action:controller/控制器/方法]
//目的：通过改变地址栏的m参数和action参数，能分别访问到addons或module中类方法
    public function runModule()
    {
        $m = Request::get('m');
        //↑通过get参数获取所访问的模块名称//p($m);模块名称
        $module = Module::where('module_name', $m)->first();
        //↑通过get获取到的模块名称与数据库中模块表里面模块名字匹配
        //  如果能匹配到讲首字母大写
        //p($module);$module是Object
        $action = Request::get('action');
        //↑通过get参数获取所要访问的模块控制器
        //p($action);controller/Index/add
        if ($module && $m && $action) {
            //↑如果满足全部条件则可以执行模块
            $info = explode('/', $action);
            //↑p($info);//打散为数组 [0] => controller[1] => Index[2] => add
            $class = ($module['module_is_system'] == 1 ? 'module' : 'addons') . '\\' . $m . '\\' . $info[0] . '\\' . ucfirst($info[1]);
            //↑从数据库中is_system的值判断该模块是否为系统内置模块进行分开处理
            //拼接非系统模块路径  //p($class); //↑addons\pic\controller\Index
//            return call_user_func_array( [ new $class , $info[ 2 ] ] , [] );
            //调用回调函数 实例化模块
            die(call_user_func_array([new $class, $info[2]], []));
        }
//        return false;
        //↑匹配失败返回值false，不执行模块
    }
}